/*
 *    Copyright 2008-2009 The PoCo Team
 *
 *    Licensed under the Apache License, Version 2.0 (the "License");
 *    you may not use this file except in compliance with the License.
 *    You may obtain a copy of the License at
 *
 *       http://www.apache.org/licenses/LICENSE-2.0
 *
 *    Unless required by applicable law or agreed to in writing, software
 *    distributed under the License is distributed on an "AS IS" BASIS,
 *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *    See the License for the specific language governing permissions and
 *    limitations under the License.
 */
package com.asemantics.poco;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.TimeZone;

import lombok.Data;

/**
 * 
 * @author Simone Tripodi
 * @author Michele Mostarda
 * @version $Id: Entry.java 223 2009-12-19 21:32:32Z simone.tripodi@gmail.com $
 */
@Data
public final class Entry {

    // 7.2.1. Singular Fields

    private String id;

    private String displayName;

    private Name name;

    private String nickname;

    private DateTime published;

    private DateTime updated;

    private Date birthday;

    private Date anniversary;

    private Gender gender;

    private String note;

    private String preferredUsername;

    private TimeZone utcOffset;

    private boolean connected;

    // OpenSocial Singular Fields

    private String aboutMe;

    private BodyType bodyType;

    private CurrentLocation currentLocation;

    private Drinker drinker;

    private String ethnicity;

    private String fashion;

    private String happiestWhen;

    private String humor;

    private String livingArrangement;

    private String lookingFor;

    private OSUrl profileSong;

    private OSUrl profileVideo;

    private String relationshipStatus;

    private String religion;

    private String romance;

    private String scaredOf;

    private String sexualOrientation;

    private Smoker smoker;

    private String status;

    // 7.2.2. Plural Fields

    private final List<Email> emails = new ArrayList<Email>();

    private final List<Url> urls = new ArrayList<Url>();

    private final List<PhoneNumber> phoneNumbers = new ArrayList<PhoneNumber>();

    private final List<IM> ims = new ArrayList<IM>();

    private final List<Photo> photos = new ArrayList<Photo>();

    private final List<String> tags = new ArrayList<String>();

    private final List<String> relationships = new ArrayList<String>();

    private final List<Address> addresses = new ArrayList<Address>();

    private final List<Organization> organizations = new ArrayList<Organization>();

    private final List<Account> accounts = new ArrayList<Account>();

    // OpenSocial Plural Fields

    private final List<Activity> activities = new ArrayList<Activity>();

    private final List<String> books = new ArrayList<String>();

    private final List<String> cars = new ArrayList<String>();

    private final List<String> children = new ArrayList<String>();

    private final List<String> foods = new ArrayList<String>();

    private final List<String> heroes = new ArrayList<String>();

    private final List<String> interests = new ArrayList<String>();

    private final List<String> jobInterests = new ArrayList<String>();  

    private final List<String> languagesSpoken = new ArrayList<String>();

    private final List<String> movies = new ArrayList<String>();

    private final List<String> music = new ArrayList<String>();

    private final List<String> pets = new ArrayList<String>();

    private final List<String> politicalViews = new ArrayList<String>();

    private final List<String> quotes = new ArrayList<String>();

    private final List<String> sports = new ArrayList<String>();

    private final List<String> turnOffs = new ArrayList<String>();

    private final List<String> turnOns = new ArrayList<String>();

    private final List<String> tvShows = new ArrayList<String>();

    public void addEmail(Email email) {
        this.emails.add(email);
    }

    public void addUrl(Url url) {
        this.urls.add(url);
    }

    public void addPhoneNumber(PhoneNumber phoneNumber) {
        this.phoneNumbers.add(phoneNumber);
    }

    public void addIM(IM im) {
        this.ims.add(im);
    }

    public void addPhoto(Photo photo) {
        this.photos.add(photo);
    }

    public void addTag(String tag) {
        this.tags.add(tag);
    }

    public void addRelationship(String relationship) {
        this.relationships.add(relationship);
    }

    public void addAddress(Address address) {
        this.addresses.add(address);
    }

    public void addOrganization(Organization organization) {
        this.organizations.add(organization);
    }

    public void addAccount(Account account) {
        this.accounts.add(account);
    }

    // OpenSocial Plural Fields getters

    public void addActivity(Activity activity) {
        this.activities.add(activity);
    }

    public void addBook(String book) {
        this.books.add(book);
    }

    public void addCar(String car) {
        this.cars.add(car);
    }

    public void addChild(String child) {
        this.children.add(child);
    }

    public void addFood(String food) {
        this.foods.add(food);
    }

    public void addHero(String hero) {
        this.heroes.add(hero);
    }

    public void addInterest(String interest) {
        this.interests.add(interest);
    }

    public void addJobInterest(String jobInterest) {
        this.jobInterests.add(jobInterest);
    }

    public void addLanguageSpoken(String languageSpoken) {
        this.languagesSpoken.add(languageSpoken);
    }

    public void addMovie(String movie) {
        this.movies.add(movie);
    }

    public void addMusic(String music) {
        this.music.add(music);
    }

    public void addPet(String pet) {
        this.pets.add(pet);
    }

    public void addPoliticalView(String politicalView) {
        this.politicalViews.add(politicalView);
    }

    public void addQuote(String quote) {
        this.quotes.add(quote);
    }

    public void addSport(String sport) {
        this.sports.add(sport);
    }

    public void addTurnOff(String turnOff) {
        this.turnOffs.add(turnOff);
    }

    public void addTurnOn(String turnOn) {
        this.turnOns.add(turnOn);
    }

    public void addTvShow(String tvShow) {
        this.tvShows.add(tvShow);
    }

}
